闲扯
把代码删了重写真好用!!
挺好的一道树剖套线段树的裸题
题面
Solution
套路性的树剖 $+$ 线段树来维护一下树上路径之间的问题。
先考虑对于一个数组怎么维护。
可以发现,我们需要额外记录两个值 $l_ty,r_ty$ 来表示该区间最左边和最右边的颜色。
合并的时候,如果左儿子的 $r_ty$ 等于有儿子的 $l_ty$ ,我们需要将答案减一。
那么对于树上的情况,这个依然适用。
但对于树剖查询时,每次向上跳之前,我们要看看 $top[u],f[top[u]]$ 的颜色是否相同,如果相同,答案减一。
还有就是线段树查询的时候,判断条件要改一下。
如果整个区间全部在左儿子,直接查询左儿子;如果全部在右儿子,直接查询右儿子。
否则,我们查询完左右儿子之后,我们还要看看中间的颜色是否相等。
Code
1 |
|
总结
做题分类讨论的时候要仔细一点,不要讨论漏了。